package com.beta.cust.bind.datasync.service;

import com.alibaba.fastjson.JSONObject;
import com.beta.cust.bind.datasync.dto.*;

/**
 * @author by lchen2
 * @Classname IWechatWorkStaffService
 * @Description 企业微信职工信息服务
 * @Date 2021/6/23 5:34 下午
 */
public interface IWechatWorkService {

    /**
     * 获取下游企业列表
     * 详情见：https://developer.work.weixin.qq.com/document/path/95813
     */
    WeixinCorpListDTO corpList(boolean again, String corpId, String cursor);

    /**
     * 获取部门列表
     * 详情见：https://developer.work.weixin.qq.com/document/path/90208
     */
    WeixinDepListDTO departmentList(boolean again, String corpId,String agentid);

    /**
     * 获取部门详情<br>
     * 详情见：https://developer.work.weixin.qq.com/document/path/95351<br>
     */
    WeixinDepListDTO.DepartmentDetailDTO departmentDetail(Long departmentId, String corpId, String agentId);

    /**
     * 获取部门成员详情<br>
     * https://developer.work.weixin.qq.com/document/path/90201
     *
     * @param departmentId -> 企业id -> 是否必须：是
     * @param again        -> 重试 -> true表示重试，flase表示不重试 -> 是否必须：是
     * @param corpId -> 企业id -> 是否必须：是
     */
    PersonnelDTO employeeDetailList(boolean again, Long departmentId, String corpId,String agentId);

    /**
     * 获取用户详情<br>
     * 详情见：https://developer.work.weixin.qq.com/document/path/90196<br>
     */
    WeixinUserDetailDto employeeDetail(String userID, String corpId, String agentId);

    /**
     * 批量获取客户详情
     * 详情见：https://work.weixin.qq.com/api/doc/90000/90135/92994
     */
    ExternalcontactByUserIdDTO queryCustInfos(boolean again, String userId, String corpId, String agentid, String cursor);

    /**
     * 获取客户详情
     * 详情见：https://work.weixin.qq.com/api/doc/90000/90135/92114
     */
    ExternalCustInfoDTO getExternalCustInfo(String externalUserId, String corpId, String agentId);

    /**
     * 员工/部门 变更事件回调
     */
    void callBackEmplChange(JSONObject jo, String enterpriseId);


    /**
     * 客户联系->客户的事件变更回调<br>
     * 即 员工删除客户 和 客户删除员工 和添加客户 的事件回调<br>
     * 详情见：https://work.weixin.qq.com/api/doc/90000/90135/92130#%E5%88%A0%E9%99%A4%E4%BC%81%E4%B8%9A%E5%AE%A2%E6%88%B7%E4%BA%8B%E4%BB%B6<br>
     */
    void callBackCustChange(JSONObject jo, String enterpriseId);

}


